package com.young.ums.service;

import com.young.common.util.Page;
import com.young.ums.model.Role;
import com.young.ums.model.RoleUser;

import java.util.List;

/**
 * 角色用户服务接口
 * Created by imrookie on 2018-10-9.
 */
public interface IRoleUserService {

    /**
     * 查询
     *
     * @param obj
     * @return
     */
    List<RoleUser> getList(RoleUser obj);

    /**
     * 分页查询
     *
     * @param obj
     * @param page
     * @return
     */
    List<RoleUser> getPage(RoleUser obj, Page page);

    /**
     * 查询单条
     *
     * @param id
     * @return
     */
    RoleUser get(String id);

    /**
     * 统计数量
     *
     * @param obj
     * @return Integer 满足xx条件的数据有多少条
     */
    int count(RoleUser obj);

    /**
     * 修改
     *
     * @param obj
     * @return
     */
    int update(RoleUser obj);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    int delete(String id);

    /**
     * 删除角色相关的关联关系
     *
     * @param roleId 角色id
     * @return
     */
    int deleteByRoleId(String roleId);

    /**
     * 删除用户相关的关联关系
     *
     * @param userId 用户id
     * @return
     */
    int deleteByUserId(String userId);

    /**
     * 批量删除
     *
     * @param idArr
     * @return
     */
    int delete(String[] idArr);

    /**
     * 插入
     *
     * @param obj
     * @return
     */
    int insert(RoleUser obj);

    /**
     * 批量插入
     *
     * @param list
     * @return
     */
    int batchInsert(List<RoleUser> list);

    /**
     * 当角色和用户不存在关联时执行插入
     *
     * @param roleId 角色id
     * @param userId 用户id
     * @return
     */
    int insertWhenNotHasRelevance(String roleId, String userId);

    /**
     * 批量关联用户(N)到角色(1)
     *
     * @param roleId  角色id
     * @param userIds 用户id数组
     * @return
     */
    int relevanceUsers2Role(String roleId, String[] userIds);

    /**
     * 批量关联角色(N)到用户(1)
     *
     * @param userId  用户id
     * @param roleIds 角色id数组
     * @return
     */
    int relevanceRoles2User(String userId, String[] roleIds);

    /**
     * 删除角色用户关系
     *
     * @param roleId 角色id
     * @param userId 用户id
     * @return
     */
    int removeRoleUser(String roleId, String userId);

    /**
     * 判断指定角色和用户是否已经关联
     *
     * @param roleId 角色id
     * @param userId 用户id
     * @return
     */
    boolean isRelevanced(String roleId, String userId);

    /**
     * 根据用户id查询用户拥有的角色数组
     *
     * @param userId 用户id
     * @return
     */
    String[] getRoleIdsByUserId(String userId);

    /**
     * 根据角色id查询关联的用户数组
     *
     * @param roleId 角色id
     * @return
     */
    String[] getUserIdsByRoleId(String roleId);

    /**
     * 查询用户拥有的管理员角色
     *
     * @param userId 用户id
     * @return
     */
    List<Role> getAdminRoleListByUserId(String userId);

}